#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e4 + 10, M = 2e4 + 10;

int n, m, s, t;
struct path
{
    int u, v, w;
}e[M];// zdl:: 这道题目是可以直接使用二分答案来解决的但是我们可以使用贪心+ 并查集来解决这样的问题！！！

int fa[N];
int find(int x) {return x == fa[x] ? x : fa[x] = find(fa[x]);}
void un(int x, int y) { fa[find(x)] = find(y);}

int main()
{
    cin >> n >> m >> s >> t;
    for (int i = 1; i <= m; i++)
    {
        cin >> e[i].u >> e[i].v >> e[i].w;
    }
    sort(e + 1, e + 1 + m, [](path& x, path& y){
        return x.w < y.w;
    });
    // zdl:: 初始化并查集
    for (int i = 1; i <= n; i++) fa[i] = i;
    int ret = e[m].w;
    // 贪心扩图
    // zdl:: 这里就只需要进行m次扩边就好了！
    for (int i = 1; i <= m; i++)
    {
        int x = e[i].u, y = e[i].v, z = e[i].w;
        un(x, y);
        ret = z;
        if (find(s) == find(t)) break;
    }
    cout << ret << endl;
    return 0;
}